python array和list的区别 | 您所在的位置:网站首页 › python array和list区别 › python array和list的区别 |
我并没有声称这是完整的答案,但有一些提示可以理解这一点. bytearray是一个字节序列,list是一个对象引用序列.所以[1,2,3]实际上保存了存储在其他地方存储在内存中的整数的指针.要计算列表结构的总内存消耗,我们可以这样做(我正在进一步使用sys.getsizeof,它调用__sizeof__加上GC开销) >>> x = [1,2,3] >>> sum(map(getsizeof, x)) + getsizeof(x) 172 不同机器上的结果可能不同. 另外,看看这个: >> getsizeof([]) 64 这是因为列表是可变的.为了快速,这个结构分配一些内存范围来存储对象的引用(加上元的一些存储,例如列表的长度).附加项目时,下一个内存单元格将填充对这些项目的引用.当没有空间存储新项目时,将分配新的更大范围,在那里复制现有数据并释放旧数据.这称为动态数组. 您可以通过运行此代码来观察此行为. import sys data=[] n=15 for k in range(n): a = len(data) b = sys.getsizeof(data) print('Length: {0:3d}; Size in bytes: {1:4d}'.format(a, b)) data.append(None) 我的结果: Length: 0; Size in bytes: 64 Length: 1; Size in bytes: 96 Length: 2; Size in bytes: 96 Length: 3; Size in bytes: 96 Length: 4; Size in bytes: 96 Length: 5; Size in bytes: 128 Length: 6; Size in bytes: 128 Length: 7; Size in bytes: 128 Length: 8; Size in bytes: 128 Length: 9; Size in bytes: 192 Length: 10; Size in bytes: 192 Length: 11; Size in bytes: 192 Length: 12; Size in bytes: 192 Length: 13; Size in bytes: 192 Length: 14; Size in bytes: 192 我们可以看到有64个字节用于存储8个内存地址(每个64位). 与bytearray()几乎相同(将第二行更改为data = bytearray()并在最后一行中追加1). Length: 0; Size in bytes: 56 Length: 1; Size in bytes: 58 Length: 2; Size in bytes: 61 Length: 3; Size in bytes: 61 Length: 4; Size in bytes: 63 Length: 5; Size in bytes: 63 Length: 6; Size in bytes: 65 Length: 7; Size in bytes: 65 Length: 8; Size in bytes: 68 Length: 9; Size in bytes: 68 Length: 10; Size in bytes: 68 Length: 11; Size in bytes: 74 Length: 12; Size in bytes: 74 Length: 13; Size in bytes: 74 Length: 14; Size in bytes: 74 区别在于内存现在用来保存实际的字节值,而不是指针. 希望能帮助您进一步调查. |
CopyRight 2018-2019 实验室设备网 版权所有 |